// 题目一
// const promise = new Promise((resolve, reject) => {
//     console.log(1);
//     resolve();
//     console.log(2);
// });
// promise.then(() => {
//     console.log(3);
// });
// console.log(4);
// console.log('--------------------');

// 题目二
// const promise1 = new Promise((resolve, reject) => {
//     setTimeout(() => {
//         resolve('success');
//     }, 1000);
// });
// const promise2 = promise1.then(() => {
//     throw new Error('error!!!');
// });

// console.log('promise1', promise1);
// console.log('promise2', promise2);

// setTimeout(() => {
//     console.log('promise1', promise1);
//     console.log('promise2', promise2);
// }, 2000);

// 题目三;
// const promise = new Promise((resolve, reject) => {
//     resolve('success1'); // 如果此处添加上setTimeout定时器，立即执行的resolve会执行第二个success2
//     reject('error');
//     resolve('success2');
//     resolve('success3');
// });

// promise
//     .then(res => {
//         console.log('then: ', res);
//     })
//     .catch(err => {
//         console.log('catch: ', err);
//     })
//     .then(res => {
//         console.log('step one');
//     })
//     .then(res => {
//         console.log('step two');
//     });

// 题目四;
// 需要注意的是，立即resolve的 Promise 对象，是在本轮“事件循环”（event loop）的结束时，而不是在下一轮“事件循环”的开始时。
// 下一轮“事件循环”的开始
// setTimeout(function() {
//     console.log('three');
// }, 0);

// // 立即resolve的 Promise 对象
// Promise.resolve().then(function() {
//     console.log('two');
// })

// console.log('one');

// 题目五;
// Promise.resolve(1)
//     .then(res => {
//         console.log(res);
//         return 2;
//     })
//     .catch(err => {
//         return 3;
//     })
//     .then(res => {
//         console.log(res);
//     });

// 题目六
// const promise = new Promise((resolve, reject) => {
//     setTimeout(() => {
//         console.log('once');
//         resolve('success');
//     }, 1000);
// });

// const start = Date.now();
// promise.then(res => {
//     console.log('here', res, Date.now() - start);
// });
// promise.then(res => {
//     console.log('here2', res, Date.now() - start);
// });

// 题目七
// Promise.resolve()
//     .then(() => {
//         return new Error('error!!!');
//     })
//     .then(res => {
//         console.log('then: ', res);
//     })
//     .catch(err => {
//         console.log('catch: ', err);
//     });

// 题目八
// const promise = Promise.resolve().then(() => {
//     return promise;
// });
// promise.catch(console.error);


// 题目九
Promise.resolve(1)
    .then(2)
    .then(Promise.resolve(3))
    .then(console.log);
